#ifndef _SPLICE_BOX_H_JM_20110830_
#define _SPLICE_BOX_H_JM_20110830_


#include "GenericBoxModel.h"


namespace jm4bbx {

//class StartBoxqq  : public bobox::basic_box2  {
//public:
//      typedef generic_box_model<StartBox, void> model;
//      
//    StartBox(bobox::box_id_type id, bobox::box_tid_type tid, bobox::request *req, 
//        const bobox::parameters &params) : bobox::basic_box2(id, tid, req) {
//           
//    }
//
//      virtual void init_impl() {
//        add_group(group_index_type(0), bobox::column_index_type(0), 0);
//        add_group(group_index_type(1), bobox::column_index_type(0), 0);
//        add_group(group_index_type(2), bobox::column_index_type(0), 0);
//
//         receive(bobox::inarc_index_type(0), group_index_type(2));
//
//      }
//      virtual void sync_mach_etwas() {
//        send_poisoned(bobox::outarc_index_type(0));
//        send_poisoned(bobox::outarc_index_type(1));
//      }
//
//};


//template<class KeyType>
//class SpliceBox  : public bobox::basic_box2  {
//public:
//    enum { INPUT_GROUP_1 = 0, INPUT_GROUP_2 = 1 };
//    enum { INPUT_COLUMN_1 = 0, INPUT_COLUMN_2 = 1};
//
//    typedef generic_box_model<SpliceBox, void> model;
//    	
//    SpliceBox(bobox::box_id_type id, bobox::box_tid_type tid, bobox::request *req, 
//        const bobox::parameters &params) : bobox::basic_box2(id, tid, req) {
//           
//    }
//
//    virtual void init_impl() {
//		add_group(group_index_type(INPUT_GROUP_1), bobox::column_index_type(INPUT_COLUMN_1), 
//            get_input_descriptors(bobox::inarc_index_type(INPUT_COLUMN_1)));
//        add_group(group_index_type(INPUT_GROUP_2), bobox::column_index_type(INPUT_GROUP_2), 
//            get_input_descriptors(bobox::inarc_index_type(INPUT_GROUP_2)));
//
//		receive(bobox::inarc_index_type(INPUT_COLUMN_1), group_index_type(INPUT_GROUP_1));        
//        receive(bobox::inarc_index_type(INPUT_COLUMN_2), group_index_type(INPUT_GROUP_2));        
//    }
//
//    virtual void sync_mach_etwas() {
//        const group& g1 = get_group(group_index_type(INPUT_GROUP_1));
//	    if (g1.poisoned_) {
//       //     send_poisoned(bobox::outarc_index_type(0));
//            receive(bobox::inarc_index_type(INPUT_COLUMN_1), group_index_type(INPUT_GROUP_1));        
//            receive(bobox::inarc_index_type(INPUT_COLUMN_2), group_index_type(INPUT_GROUP_2));  
//            return;
//        }
//        const group& g2 = get_group(group_index_type(INPUT_GROUP_2));
//	    if (g2.poisoned_) {
//         //   send_poisoned(bobox::outarc_index_type(0));
//            receive(bobox::inarc_index_type(INPUT_COLUMN_1), group_index_type(INPUT_GROUP_1));        
//            receive(bobox::inarc_index_type(INPUT_COLUMN_2), group_index_type(INPUT_GROUP_2));  
//            return;
//        }
//
//        for (; g1.rdpos_ < g1.rdend_; ++g1.rdpos_) {
//				std::cout << get_data<bobox::int_policy>(bobox::column_index_type(INPUT_COLUMN_1))[g1.rdpos_] << "   ";
//        }
//
//        std::cout << std::endl;
//
//        for (; g2.rdpos_ < g2.rdend_; ++g2.rdpos_) {
//				std::cout << get_data<bobox::int_policy>(bobox::column_index_type(INPUT_COLUMN_2))[g2.rdpos_] << "   ";
//        }
//
//        std::cout << std::endl << "----------------------------------------" << std::endl;
//
//        receive(bobox::inarc_index_type(INPUT_COLUMN_1), group_index_type(INPUT_GROUP_1));        
//        receive(bobox::inarc_index_type(INPUT_COLUMN_2), group_index_type(INPUT_GROUP_2));       
//    }
//
//protected:
//
//
//};

} //    namespace jm4bbx
#endif
//
